#include "threadpool.h"

ThreadPool::ThreadPool(size_t threads) : stop(false) {
    for (size_t i = 0; i < threads; ++i) {
        workers.emplace_back([this] {
        while (true) {
    std::function<void()> task;
    {
        std::unique_lock<std::mutex> lock(this->queue_mutex);
        this->condition.wait(lock, [this] {
            return this->stop || !this->tasks.empty();
        });
        
        if (this->stop && this->tasks.empty())
            return;
        
        task = std::move(this->tasks.front());
        this->tasks.pop();
    }
    
    try {
        task();  // 执行任务
    } catch (const std::exception& e) {
        std::cerr << "Task exception: " << e.what() << std::endl;
    } catch (...) {
        std::cerr << "Unknown task exception" << std::endl;
    }
}
        });
    }
}

ThreadPool::~ThreadPool() {
    {
        std::unique_lock<std::mutex> lock(queue_mutex);
        stop = true;
    }
    condition.notify_all();
    for (std::thread &worker : workers)
        worker.join();
}